PEP 591 – Adding a final qualifier to typing
Abstractより3つの目的
Declaring that a method should not be overridden
Declaring that a class should not be subclassed
Declaring that a variable or attribute should not be reassigned
「変数や属性に再代入すべきでないと宣言する」
A final attribute declared in a class body without an initializer must be initialized in the __init__ method (except in stub files):
「イニシャライザの外のクラスのボディで宣言されたFinal付きの属性は__init__メソッドで初期化されなければならない」
code:py
class ImmutablePoint:
y: Finalint # Error: final attribute without an initializer def __init__(self, x: int) -> None:
self.x = x # Good
error: Final name must be initialized with a value
Final can’t be used in annotations for function arguments:
「関数の引数のアノテーションには使えない」
Immutable ABCs and containers may be used in combination with Final to prevent mutating such values:
「値の変更を防ぐために、イミュータブルなABCとコンテナをFinalと組合せて使ってもよい」
code:immutable_sequence.py
y.append('x') # Error: "Sequencestr" has no attribute "append" MutableSequenceならerrorにならない